package br.edu.infnet.business;

import java.util.HashMap;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;

import br.edu.infnet.exception.UserNotFoundException;
import br.edu.infnet.model.TipoUsuario;
import br.edu.infnet.model.TokenLogin;
import br.edu.infnet.model.Usuario;

public class ServicoAutenticacao implements IServicoAutenticacao {

	static HashMap<String, Usuario> usuarios = new HashMap<String, Usuario>();
	
	static{
		Usuario u = new Usuario();
		
		u.setAgencia(100);
		u.setLogin("G100");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.GERENTE);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(100);
		u.setLogin("F101");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(100);
		u.setLogin("F102");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(100);
		u.setLogin("F103");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(200);
		u.setLogin("G200");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(200);
		u.setLogin("F201");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(200);
		u.setLogin("F202");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(200);
		u.setLogin("F203");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(300);
		u.setLogin("G300");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(300);
		u.setLogin("F301");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
		
		u.setAgencia(300);
		u.setLogin("F302");
		u.setSenha("Senha123");
		u.setTipoUsuario(TipoUsuario.FUNCIONARIO);
		usuarios.put(u.getLogin(), u);
	}
	
	private Usuario buscarUsuario(String login) throws UserNotFoundException {
		if (usuarios.containsKey(login))
			throw new UserNotFoundException();
		
		Usuario usuario = usuarios.get(login);
		return usuario;
	}
	
	@Override
	public TokenLogin validarSenha(String login, String senha)
			throws UserNotFoundException {
		
		Usuario usuario = buscarUsuario(login);
		
		if (usuario.validarSenha(senha)){
			TokenLogin token = new TokenLogin();
			
			token.setAgencia(usuario.getAgencia());
			token.setTipoUsuario(usuario.getTipoUsuario());
			token.setLogin(usuario.getLogin());
			
			return token;
		}
		
		return null;
	}

	@Override
	public TipoUsuario obterTipoUsuario(String login)
			throws UserNotFoundException {
		return buscarUsuario(login).getTipoUsuario();
	}

}
